package com.cell.service.order;


import com.cell.pojo.VO.order.AgentOrderVO;
import com.cell.pojo.VO.order.UserOrderVO;
import com.cell.pojo.entity.order.Order;
import com.baomidou.mybatisplus.extension.service.IService;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author cloudJiang
 * @since 2022-06-04
 */
public interface IOrderService extends IService<Order> {

    /**
     * 用户提前结束订单，在订单状态为2的情况下更改订单状态为3
     *
     * @return
     */
    void endOrder(Long id);

    /**
     * 用户接受并完成当前订单，将订单状态修改为2，
     * 并填入正确的物品重量（singlePrice），此时order中计算totalPrice并填入字段
     * <p>
     *
     *
     * @return 成功返回0，否则返回1
     */
    void overOrder(Long id, BigDecimal weight);

    /**
     * 用户提交订单异常，更改订单状态为4，错误信息必填。
     *
     * @return 成功返回0，错误信息字段空返回1
     */
    void commitErrorOrder(Long id, String errorMessage);

    /**
     * 用户第一次发布订单，此时订单状态为0待接单
     *
     * @param weight 卖家填写大概重量
     * @param type   回收物品类型
     * @param name   回收物品名称
     * @return 成功返回0, 否则返回1
     */
    void commitOrder(Long salId, String name, String type, BigDecimal weight);


    /**
     * 通过传入的不同状态码,用户id来查询订单（若状态码为空则查找所有订单）
     *
     * @param states
     */
    List<UserOrderVO> getAllOrder(Integer states, Long userId);

    /**
     * 接收订单，订单中填入开始时间，买方id，以及订单开始时间（当前时间）
     * 此时订单状态为1
     *
     * @return 订单接受成功返回0，否则返回1
     */
    void acceptOrder(Long id, Long buyId);

    /**
     * 删除订单
     */
    void deleteOrder(Long orderID);

    void deleteOrderByAdmin(Long orderID);

    /**
     * 代理商获取附近可以接受的订单，获取范围取决于等级
     *
     * @return
     */
    List<AgentOrderVO> getNearbyOrder(Integer state, Long locationId);


}
